package com.qfjy.config.example4;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName BlogTopicConfig
 * @Description TODO  博客 发送 关注者 配置
 * @Author guoweixin
 * @Date 2022/4/2
 * @Version 1.0
 */
@Configuration
public class BlogTopicConfig {
    /**
     * TODO  1、定义交换机    blogTopicExchange
     *       2、定义相应队列
     *          关注了Java相关技术，有新文章时，会推送              blog.java.queue
     *           关注了 Python相关技术，有新文章时，会推送 等       blog.python.queue
     *          关注了Java和Python，任意有新文章时，会推送队列等...  blog.all.queue
     *       3、交换机和队列进行绑定
     */

    /**
     * TODO 定义主题交换机
     */
    @Bean
    public TopicExchange blogTopicExchange(){

        return new TopicExchange("blogTopicExchange");
    }
    /**
     * TODO 定义相应队列
     */
    /**java队列*/
    @Bean
    public Queue blogJavaQueue(){
        return new Queue("blog.java.queue");
    }
    /**python*/
    @Bean
    public Queue blogPythonQueue(){
        return new Queue("blog.python.queue");
    }
    /**全部 */
    @Bean
    public Queue blogAllQueue(){
        return new Queue("blog.all.queue");
    }

    /**
     * TODO  3、队列向交换机进行绑定（routing key)
     */
    /**JAVA*/
    @Bean
    public Binding bindJavaTopicExchange(Queue blogJavaQueue,TopicExchange blogTopicExchange){

        return BindingBuilder.bind(blogJavaQueue).to(blogTopicExchange).with("blog.java");
    }
    /**Python*/
    @Bean
    public Binding bindPythonTopicExchange(Queue blogPythonQueue,TopicExchange blogTopicExchange){

        return BindingBuilder.bind(blogPythonQueue).to(blogTopicExchange).with("blog.python");
    }
    /**All全部  blog.java  blog.python*/
    @Bean
    public Binding bindAllTopicExchange(Queue blogAllQueue,TopicExchange blogTopicExchange){
        return BindingBuilder.bind(blogAllQueue).to(blogTopicExchange).with("blog.#");
    }
}
